package com.aisi.backend.utils;

import com.aisi.backend.domain.RestBean;
import com.alibaba.fastjson2.JSON;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedReader;

/**
 * @Author: shenjianZ
 * @Date: 2024/4/30 下午10:52
 * @Description:
 */


@Slf4j
public class WebUtils {

    /**
     * 将 RestBean<span style="color:yellow;">序列化</span>  为JSON字符串 并写入到响应中
     * @param resp 响应对象
     * @param restBean 目标类型实例
     */
    public static void writeJson(HttpServletResponse resp, RestBean restBean) {
        try {
            resp.setCharacterEncoding("UTF-8");
            resp.setContentType("application/json;charset=utf-8");
            resp.getWriter().write(JSON.toJSONString(restBean));
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }

    /**
     * 将JSON字符串 <span style="color:yellow;">反序列化</span>  为目标类型Java对象
     * @param req Http请求对象
     * @param clazz 目标类型的字节码对象
     * @return 目标类型实例
     * @param <V> 目标类型
     */
    public static <V> V readJson(ServletRequest req, Class<V> clazz) {
        V v = null;
        try {
            // 读取请求的输入流，并将 JSON 数据解析成
            BufferedReader reader = req.getReader();
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            String json = sb.toString();
            // 使用 FastJSON 将 JSON 字符串转换为指定的 Java 对象
            v = JSON.parseObject(json, clazz);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return v;
    }
}